package cn.lingyangwl.agile.tenant.core;

import cn.lingyangwl.agile.model.constants.*;

import java.lang.annotation.*;

/**
 * 背景: 一些数据需要进行部分隔离
 *
 * 比如: 消息推送场景, 整个系统分为, 场景管理型租户、业务总租户、业务子租户
 *
 * 每个场景的消息推送都由场景管理型租户进行维护(开发/运维人员), 然后使用我们的系统用户，可以申请一个总租户，然后在
 * 总租户里配置好微信公众号等基础配置，总租户一般也需要一些推送场景，也可以禁用某些消息通知，这里就需要对状态、渠道设置数据进行隔离，其他数据
 * 使用场景管理租户中的数据 (数据部分隔离)
 *
 * 但是有一天这个总租户下边的某个子租户，想要单独禁用某些消息通知，这里又需要进行隔离
 *
 * 所以说，一个对象中可以不同的字段需要不同的隔离级别，就比如上述场景，我们需要对渠道设置信息进行场景管理型隔离级别，对状态进行租户独立隔离级别
 * @author shenguangyang
 */
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataPartIsolation {
    DataIsolateLevel level() default DataIsolateLevel.ALONE;
}
